package com.paipai.service;

import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.BoundHashOperations;
import org.springframework.data.redis.core.HashOperations;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;

import com.alibaba.fastjson.JSON;
import com.paipai.client.ProductClient;
import com.paipai.entity.Carts;
import com.paipai.entity.Product;
import com.paipai.loginInterceptor.LoginInterceptor;
import com.paipai.utils.UserInfo;

@Service
public class CartsService {

	@Autowired
	private ProductClient productClient;

	private static final String KEY_PREFIX = "paipai:cart:uid:";

	private static final String KEY_PRICE = "paipai:product:price";

	@Autowired
	private StringRedisTemplate redisTemplate;

	// 加入收藏
	public String addcarts(Carts carts) {
		System.out.println(carts.getPid());
		// 远程调查询商品信息
		Product product = productClient.finProductById(carts.getPid());

		// 拦截器获取用户信息
		UserInfo userInfo = LoginInterceptor.getTlocal();
		// Redis的key
		String key = KEY_PREFIX + userInfo.getId();

		// 获取hash操作对象
		BoundHashOperations<String, Object, Object> hashOps = redisTemplate.boundHashOps(key);
		// 判断redis是否有该商品
		Boolean flag = hashOps.hasKey(product.getId().toString());
		// 存在 直接返回
		if (flag) {
			return "已存在";

		}
		// 设置用户名字
		carts.setUid(userInfo.getId());
		// 商品名称
		carts.setPid(product.getId());
		// 图片
		carts.setImg(product.getImg());
		// 商品姓名
		carts.setProName(product.getProName());
		// 描述
		carts.setInfo(product.getInfo());
		// 现在价格
		carts.setPresentPrice(product.getPresentPrice());

//		HashOperations<String, String,Float> hash = redisTemplate.opsForHash();
//		Float price = hash.get(KEY_PRICE, product.getId().toString());
//		if(price!=null) {
//			// 现在价格
//			carts.setPresentPrice(price);
//		}else {
//			
//			
//		}

		// 结束时间
		carts.setDeadline(product.getDeadline());
		// 起拍价格
		carts.setStartingPrice(product.getStartingPrice());

		// 加入 redis
		hashOps.put(product.getId().toString(), JSON.toJSONString(carts));
		// 加入成功 返回
		return "yes";
	}

	/**
	 * 将storage转移到redis
	 * 
	 * @param carts
	 * @return
	 */
	public String addstorage(String proids) {

		List<Product> list = productClient.finProductListByIds(proids);

		// 拦截器获取用户信息
		UserInfo userInfo = LoginInterceptor.getTlocal();

		// Redis的key
		String key = KEY_PREFIX + userInfo.getId();

		// 获取hash操作对象
		BoundHashOperations<String, Object, Object> hashOps = redisTemplate.boundHashOps(key);

		for (Product product : list) {

			Carts carts = new Carts();

			// 设置用户名字
			carts.setUid(userInfo.getId());
			// 商品名称
			carts.setPid(product.getId());
			// 图片
			carts.setImg(product.getImg());
			// 商品姓名
			carts.setProName(product.getProName());
			// 描述
			carts.setInfo(product.getInfo());
			// 现在价格
			carts.setPresentPrice(product.getPresentPrice());

			// 结束时间
			carts.setDeadline(product.getDeadline());
			// 起拍价格
			carts.setStartingPrice(product.getStartingPrice());

			// 加入 redis
			hashOps.put(product.getId().toString(), JSON.toJSONString(carts));

		}

		return "ok";
	}

	/**
	 * 登录后查询购物车
	 * 
	 * @return
	 */
	public List<Carts> findcarts() {

		// 拦截器获取用户信息
		UserInfo userInfo = LoginInterceptor.getTlocal();

		// Redis的key
		String key = KEY_PREFIX + userInfo.getId();
		// 如果key不存在
		if (!this.redisTemplate.hasKey(key)) {
			// 不存在，直接返回
			return null;
		}
		// 获取hash操作对象
		BoundHashOperations<String, String, String> hashOps = redisTemplate.boundHashOps(key);
		// 获取全部value
		List<String> redisCarts = hashOps.values();
		// 判断是否有数据
		if (CollectionUtils.isEmpty(redisCarts)) {
			return null;
		}
		HashOperations<String, String, String> hash = redisTemplate.opsForHash();

		ArrayList<Carts> list = new ArrayList<Carts>();

		for (String object : redisCarts) {
			Carts cart = JSON.parseObject(object, Carts.class);
			// 以商品id查询价格redis表
			String price = hash.get(KEY_PRICE, cart.getPid().toString());
			// 如果不为null
			if (price != null) {
				//System.out.println("AA");
				//System.out.println(price);
				cart.setPresentPrice(Float.parseFloat(price) );
			}

			list.add(cart);
		}
		return list;
	}

	public Long deletecartss(Integer id) {

		// 拦截器获取用户信息
		UserInfo userInfo = LoginInterceptor.getTlocal();

		// Redis的key
		String key = KEY_PREFIX + userInfo.getId();

		// 获取hash操作对象
		BoundHashOperations<String, String, String> hashOps = redisTemplate.boundHashOps(key);
		
		Long row= hashOps.delete(id.toString());

		return row;
	}

}
